泛型(Generics)
泛型是TypeScript最强大的特性之一,允许在定义时不指定具体类型,在使用时才确定。
基本用法
// 泛型函数
function identity<T>(value: T): T {
return value
}
identity<string>('hello') // 明确指定类型
identity(42) // 类型推断为number
typescript
泛型接口
// API响应的通用类型
interface ApiResponse<T> {
code: number
message: string
data: T
}
// 分页响应
interface PageResponse<T> {
list: T[]
total: number
page: number
pageSize: number
}
// 使用
type UserResponse = ApiResponse<User>
type CourseListResponse = ApiResponse<PageResponse<Course>>
typescript
泛型约束
// 约束T必须有length属性
function logLength<T extends { length: number }>(value: T): void {
console.log(value.length)
}
logLength('hello') // OK
logLength([1, 2, 3]) // OK
logLength(123) // Error: number没有length属性
typescript
常用工具类型
// Partial - 所有属性变为可选
type PartialUser = Partial<User>
// Required - 所有属性变为必选
type RequiredUser = Required<PartialUser>
// Pick - 选取部分属性
type UserBasic = Pick<User, 'id' | 'name'>
// Omit - 排除部分属性
type UserWithoutEmail = Omit<User, 'email'>
// Record - 键值对类型
type UserMap = Record<string, User>
typescript
泛型在NestJS中的应用
// 泛型Service基类
abstract class BaseService<T> {
abstract repository: Repository<T>
async findAll(): Promise<T[]> {
return this.repository.find()
}
async findById(id: number): Promise<T | null> {
return this.repository.findOneBy({ id })
}
}
typescript
↑